package com.team.game.framework.impl;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.util.Log;
import android.view.SurfaceHolder;

import com.team.game.Loader;
import com.team.game.framework.Game;

public class SurfaceThread extends Thread {

    public static float deltaTime;
    public static boolean wait = true;

    private final Game game;
    private final Loader loader;
    private final SurfaceHolder surfaceHolder;

    private boolean runFlag = false;

    private long fpsStart;

    //---
    Paint paint;
    //---

    public SurfaceThread (SurfaceHolder surfaceHolder, Game game) {
        this.game = game;
        this.surfaceHolder = surfaceHolder;
        loader = new Loader ();
        paint = new Paint ();
        paint.setColor (Color.YELLOW);
        paint.setTextSize (40);
    }

    public void setRunning(boolean run) {
        runFlag = run;
    }

    @Override
    public void run() {
        Canvas canvas;
        fpsStart = System.nanoTime();
        while (runFlag) {
            // получаем текущее время и вычисляем разницу с предыдущим
            // сохраненным моментом времени
            canvas = null;
            try {
                deltaTime = (System.nanoTime() - fpsStart) / 1000000000.0f;
                fpsStart = System.nanoTime ();
                Log.i ("time", String.valueOf (deltaTime));


                //пропускаем кадр если сурфейс не готов
                if (!surfaceHolder.getSurface ().isValid ())
                    continue;

                //если канвас нул - пропускаем кадр
                if ((canvas = surfaceHolder.lockCanvas (null)) == null)
                    continue;

                game.getCurrentScreen ().update ();

                synchronized (surfaceHolder) {
                    if (!wait) {
                        //если класс готов к отрисовке
                        game.getCurrentScreen().present(canvas);
                        // canvas.drawText (String.valueOf (deltaTime), 30 * Scale_X_Y.Scale_X, 80 * Scale_X_Y.Scale_Y, paint);
                    } else
                        loader.draw (canvas); //отрисовка загрузочного экрана
                }
            } finally {
                if (canvas != null) {
                    // отрисовка выполнена. выводим результат на экран
                    surfaceHolder.unlockCanvasAndPost(canvas);
                }
            }
        }
    }
}
